package com.dotflat.rest.utils;

import com.alibaba.fastjson.JSONObject;

import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.util.Arrays;

public class WXKitUtils {

    /**
     * 【sha1加密】
     * 开发者通过检验signature对请求进行校验（下面有校验方式）。
     * 若确认此次GET请求来自微信服务器，请原样返回echostr参数内容，则接入生效，成为开发者成功，
     * 否则接入失败。加密/校验流程如下：

     1）将token、timestamp、nonce三个参数进行字典序排序
     2）将三个参数字符串拼接成一个字符串进行sha1加密
     3）开发者获得加密后的字符串可与signature对比，标识该请求来源于微信
     */
    public static String sha1(String signature, String timestamp, String nonce, String echostr, String token){
        String[] arr = new String[]{token,timestamp, nonce};
        Arrays.sort(arr);
        String str = arr[0]+arr[1]+arr[2];
        StringBuilder sb = new StringBuilder();
        try {
            //进行md5加密
            //MessageDigest md = MessageDigest.getInstance("md5");
            //进行sha1加密
            MessageDigest md = MessageDigest.getInstance("sha1");
            byte[] digest = md.digest(str.getBytes());
            char[] char16 = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};

            for (byte b:digest) {
                sb.append(char16[(b>>4)&15]);
                sb.append(char16[b&15]);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return sb.toString();
    }

    public static void main(String[] args) {
        long l = System.currentTimeMillis();

//        System.out.println(sha1(String.valueOf(l)));
    }
    /**
     * 校验两个字符串是否相等
     * @param signature
     * @param sha1
     * @return
     */
    public static boolean check(String signature,String sha1){
        if(signature.equalsIgnoreCase(sha1)){
            return true;
        }else{
            return false;
        }
    }

    /**
     * 解析微信返回的数据，如果有错误码，则返回错误消息提示。
     * @param res
     * @return
     */
    public static String errMsg(String res){
        JSONObject jsonObject = JSONObject.parseObject(res);
        Integer errcode = (Integer) jsonObject.get("errcode");
        String errmsg = (String) jsonObject.get("errmsg");
        if(errcode != null && errcode != 0 ){
            return "出错编码：errcode="+errcode+",  出错信息：errmsg="+errmsg;
        }
        return "ok";
    }


    /**
     * 将中文乱码，转为正常的中文输出
     * @param str
     * @return
     */
    public static String StrToUtfCode(String str){
        try {
            String changedStr = new String(str.getBytes("ISO8859-1"),"UTF-8");
            return changedStr;
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        return null;
    }


}
